import operate from './operate.js'
// vuex 的使用  详情参考官网 https://uniapp.dcloud.io/vue-vuex
import {
	getToken,
	setToken,
	removeToken
} from "../../common/utils/auth"
import Vue from 'vue'
export function request(param) {
	// 请求参数
	var url = param.url,
		method = param.method,
		contentType = param.contentType,
		header = {},
		data = param.data || {},
		hideLoading = param.hideLoading || false;

	//拼接完整请求地址
	var requestUrl = operate.apiHost + url;
	//请求方式:GET或POST(POST需配置
	// header: {'content-type' : "application/x-www-form-urlencoded"},)
	if (method) {
		method = method.toUpperCase(); //小写改为大写
		if (method === "POST") {
			if (contentType) {
				contentType = contentType.toUpperCase();
				if (contentType === "JSON") {
					header = {
						'content-type': "application/json"
					};
				}
			} else {
				header = {
					'content-type': "application/x-www-form-urlencoded"
				};
			}

		}
	}
	// 请求头设置token
	let token = getToken();
	if (token) {
		header[operate.tokenRequestHeaderKey] = token
	} else {
		header[operate.tokenRequestHeaderKey] = operate.clientSecret
	}
	//加载圈
	if (!hideLoading) {
		uni.showLoading({
			title: '加载中...'
		});
	}

	// 返回promise
	return new Promise((resolve, reject) => {
		// 请求
		uni.request({
			url: requestUrl,
			data: data,
			method: method,
			header: header,
			success: (res) => {
				console.log('request success')
				// 判断 请求api 格式是否正确
				if (res.statusCode && res.statusCode === 401) {
					removeToken()
					if (Vue.prototype.$websocket) {
						Vue.prototype.$websocket.closeConnect()
					}
					uni.showToast({
						title: '登录状态失效或已过期',
						icon: 'none'
					});
					reject()
					return;
				}
				if (res.statusCode && res.statusCode === 500) {
					uni.showToast({
						title: "api错误" + res.errMsg,
						icon: 'none'
					});
					reject()
					return;
				}
				if (res.statusCode && res.statusCode !== 200) {
					uni.showToast({
						title: res.data.msg ? res.data.msg : "服务器访问错误，请联系管理员",
						icon: 'none'
					});
					reject()
					return;
				}
				if (res.data.code !== '00000') {
					uni.showToast({
						title: res.data.msg ? res.data.msg : "接口相应错误代码:" + res.data.code,
						icon: 'none'
					});
				}
				// 判断是否有权限问题，若有权限问题抛出异常
				// 将结果抛出
				resolve(res.data.data)

			},
			//请求失败
			fail: (e) => {
				console.log('request fail')
				uni.showToast({
					title: "" + e.data.msg,
					icon: 'none'
				});
				resolve(e.data);
			},
			//请求完成
			complete() {
				//隐藏加载
				if (!hideLoading) {
					uni.hideLoading();
				}
			}
		})
	})
}
